A data warehouse can receive new fact data continually, in batches, periodically or sporadically. A data warehouse client may require aggregation of the new fact data, for example, to generate reports or other meaningful information from the raw data. Accordingly, calculating aggregated values must occur periodically to account for the receipt of new data, or occur at query time. Conventional large data warehouses support bulk updating, e.g., performed once daily. However, since data in the data warehouse is only as fresh as the most recent bulk update, performing a bulk update once daily adversely affects data freshness. Additionally, during the bulk update, query responses to queries to the data warehouse are often slow or non-existent. Furthermore, conventional large data warehouses may support incremental maintenance of some aggregated values, however, only in certain contrived, special cases and with a significant query performance penalty.